A modern computer system typically comprises a central processing unit (CPU), and other supporting hardware such as system memory, communications busses, input/output controllers, storage devices, etc. The CPU is the heart of the system. It executes the instructions which comprise a computer program and directs the operation of the other system components. The speed as which the CPU executes its instructions ultimately determines the speed at which the computer system performs assigned tasks.
In a computer, numeric data may be represented in a variety of formats, but these may generally be classed as either fixed point (also called binary or integer) or floating point. A fixed point representation is a single series of digits, in which a decimal point, binary point, or other radix point has some assumed fixed position. Commonly, this fixed position is to the immediate right of the lowest order digit, making the number represented an integer. A floating point representation contains two parts: a mantissa and an exponent. The number being represented is the product of the mantissa and a base (usually either 2 or 16) raised to the power of the exponent.
Because a floating point representation allows the radix point to shift ("float") according to the value of the exponent, it is possible to represent a much larger range of numbers with an equivalent amount of storage using a floating point representation than a fixed point representation. Additionally, a floating point representation maintains the same degree of precision for very small numbers that it does for very large numbers. These characteristics make floating point representation desirable for many applications, particularly engineering and scientific applications requiring intensive numeric computation.
One of the major drawbacks with floating point representation as opposed to fixed point is that the amount of time required by the CPU to perform floating point arithmetic is significantly greater than the time required for fixed point arithmetic. This is particularly true for floating point addition and subtraction operations. Typically, in order to add/subtract two floating point numbers, the CPU will (a) subtract the exponents to determine the difference in exponents, (b) shift to the right the mantissa of the number having the smaller exponent by the exponent difference, (c) add/ subtract the mantissas, (d) shift the resultant mantissa and adjust the exponent, if necessary, and (e) round at the lowest order bit of the resultant mantissa. These steps are performed sequentially, and typically will constitute the critical path for CPU execution, meaning that the rest of the CPU will be idle waiting for the addition/subtraction to complete. Since the performance of the system is intimately tied to the speed at which the CPU can execute its instructions, the time required to complete the above sequence becomes a bottleneck to system performance. This bottleneck is more serious for numeric-intensive applications.